<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>线性回归与梯度下降算法 | Hexo</title>
  <meta name="keywords" content=" AI , 机器学习 ">
  <meta name="description" content="线性回归与梯度下降算法 | Hexo">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="description" content="第二章 线性表线性表：表内数据类型相同，有限序列 本章将以总结的形式展现： 2.1 顺序表与链式表的区别     顺序表 链式表     存取 随机存取 顺序存取   结构 顺序存储（连续） 随机存储（不连续）   空间分配 静态存储（可以动态分配） 动态存储   操作 查找 O(1) ,插入和删除O（n） 查找 O(n) ,插入和删除O（1）   缺点 插入删除不便，长度不可以改变 查找速度慢，">
<meta property="og:type" content="article">
<meta property="og:title" content="数据结构">
<meta property="og:url" content="http://yoursite.com/2021/03/12/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/index.html">
<meta property="og:site_name" content="Hexo">
<meta property="og:description" content="第二章 线性表线性表：表内数据类型相同，有限序列 本章将以总结的形式展现： 2.1 顺序表与链式表的区别     顺序表 链式表     存取 随机存取 顺序存取   结构 顺序存储（连续） 随机存储（不连续）   空间分配 静态存储（可以动态分配） 动态存储   操作 查找 O(1) ,插入和删除O（n） 查找 O(n) ,插入和删除O（1）   缺点 插入删除不便，长度不可以改变 查找速度慢，">
<meta property="og:locale" content="en_US">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/23/171951-630686.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/23/171844-136893.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/19/203103-111988.jpeg">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/23/171839-101678.jpeg">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/23/200119-510473.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202103/05/113954-515448.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/23/203146-263519.jpeg">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/19/153239-688589.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/19/153248-836462.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/19/153259-101399.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202103/11/113055-306258.jpeg">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/19/151817-474283.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/02/103950-168345.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/02/105245-140913.png">
<meta property="og:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/19/153313-134836.png">
<meta property="article:published_time" content="2021-03-11T16:00:00.000Z">
<meta property="article:modified_time" content="2021-03-11T07:19:09.038Z">
<meta property="article:author" content="MOLU">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://gitee.com/moluggg/image/raw/master/img/202102/23/171951-630686.png">


<link rel="icon" href="/img/avatar.jpg">

<link href="/css/style.css?v=1.1.0" rel="stylesheet">

<link href="/css/hl_theme/github.css?v=1.1.0" rel="stylesheet">

<link href="//cdn.jsdelivr.net/npm/animate.css@4.1.0/animate.min.css" rel="stylesheet">

<script src="//cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js"></script>
<script src="/js/titleTip.js?v=1.1.0" ></script>

<script src="//cdn.jsdelivr.net/npm/highlightjs@9.16.2/highlight.pack.min.js"></script>
<script>
    hljs.initHighlightingOnLoad();
</script>

<script src="//cdn.jsdelivr.net/npm/nprogress@0.2.0/nprogress.min.js"></script>



<script src="//cdn.jsdelivr.net/npm/jquery.cookie@1.4.1/jquery.cookie.min.js" ></script>

<script src="/js/iconfont.js?v=1.1.0" ></script>

<meta name="generator" content="Hexo 5.0.0"></head>
<div style="display: none">
  <input class="theme_disqus_on" value="false">
  <input class="theme_preload_comment" value="">
  <input class="theme_blog_path" value="">
  <input id="theme_shortcut" value="true" />
</div>


<body>
<aside class="nav">
    <div class="nav-left">
        <a href="/" class="avatar_target">
    <img class="avatar" src="/img/avatar.jpg" />
</a>
<div class="author">
    <span>MOLU</span>
</div>

<div class="icon">
    
        
        <a title="rss" href="/atom.xml" target="_blank">
            
                <i class="iconfont icon-rss"></i>
            
        </a>
        
    
        
        <a title="github" href="https://github.com/molu-ggg" target="_blank">
            
                <i class="iconfont icon-github"></i>
            
        </a>
        
    
        
    
        
    
        
        <a title="email" href="mailto:2572876783@qq.com" target="_blank">
            
                <i class="iconfont icon-email"></i>
            
        </a>
        
    
</div>




<ul>
    <li><div class="all active" data-rel="All">All<small>(35)</small></div></li>
    
        
            
            <li><div data-rel="AI论文">AI论文<small>(5)</small></div>
                
            </li>
            
        
    
        
            
            <li><div data-rel="专业知识">专业知识<small>(2)</small></div>
                
            </li>
            
        
    
        
            
            <li><div data-rel="数学">数学<small>(2)</small></div>
                
            </li>
            
        
    
        
            
            <li><div data-rel="机器学习">机器学习<small>(12)</small></div>
                
            </li>
            
        
    
        
            
            <li><div data-rel="经典算法">经典算法<small>(10)</small></div>
                
            </li>
            
        
    
</ul>
<div class="left-bottom">
    <div class="menus">
    
    
    
    
    </div>
    <div><a class="about  hasFriend  site_url"  href="/about">About</a><a style="width: 50%"  class="friends">Friends</a></div>
</div>
<input type="hidden" id="yelog_site_posts_number" value="35">

<div style="display: none">
    <span id="busuanzi_value_site_uv"></span>
    <span id="busuanzi_value_site_pv"></span>
</div>

    </div>
    <div class="nav-right">
        <div class="friends-area">
    <div class="friends-title">
        Links
        <i class="iconfont icon-left"></i>
    </div>
    <div class="friends-content">
        <ul>
            
            <li><a target="_blank" href="http://yelog.org/">叶落阁</a></li>
            
        </ul>
    </div>
</div>
        <div class="title-list">
    <div class="right-top">
        <div id="default-panel">
            <i class="iconfont icon-search" data-title="搜索 快捷键 i"></i>
            <div class="right-title">All</div>
            <i class="iconfont icon-file-tree" data-title="切换到大纲视图 快捷键 w"></i>
        </div>
        <div id="search-panel">
            <i class="iconfont icon-left" data-title="返回"></i>
            <input id="local-search-input" />
            <label class="border-line" for="input"></label>
            <i class="iconfont icon-case-sensitive" data-title="大小写敏感"></i>
            <i class="iconfont icon-tag" data-title="标签"></i>
        </div>
        <div id="outline-panel" style="display: none">
            <div class="right-title">大纲</div>
            <i class="iconfont icon-list" data-title="切换到文章列表"></i>
        </div>
    </div>

    <div class="tags-list">
    <input id="tag-search" />
    <div class="tag-wrapper">
        
            <li class="article-tag-list-item">
                <i class="iconfont icon-tag"></i><a>50</a>
            </li>
        
            <li class="article-tag-list-item">
                <i class="iconfont icon-tag"></i><a>AI</a>
            </li>
        
            <li class="article-tag-list-item">
                <i class="iconfont icon-tag"></i><a>数据结构，最短路径，图</a>
            </li>
        
            <li class="article-tag-list-item">
                <i class="iconfont icon-tag"></i><a>机器学习</a>
            </li>
        
            <li class="article-tag-list-item">
                <i class="iconfont icon-tag"></i><a>相似度计算</a>
            </li>
        
    </div>

</div>

    
    <div id="local-search-result">

    </div>
    
    <nav id="title-list-nav">
        
        <a id="top" class="All 经典算法 "
           href="/2020/07/20/b_leetcode/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="leetcode &amp; 蓝桥">leetcode &amp; 蓝桥</span>
            <span class="post-date" title="2020-07-20 00:00:00">2020/07/20</span>
        </a>
        
        <a id="top" class="All AI论文 "
           href="/2020/07/10/d_GAT/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="GAT">GAT</span>
            <span class="post-date" title="2020-07-10 08:50:20">2020/07/10</span>
        </a>
        
        <a  class="All 专业知识 "
           href="/2021/03/12/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="计算机组成原理">计算机组成原理</span>
            <span class="post-date" title="2021-03-12 00:00:00">2021/03/12</span>
        </a>
        
        <a  class="All 专业知识 "
           href="/2021/03/12/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="数据结构">数据结构</span>
            <span class="post-date" title="2021-03-12 00:00:00">2021/03/12</span>
        </a>
        
        <a  class="All 经典算法 "
           href="/2020/12/05/b_%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E4%B8%8E%E8%AE%B0%E5%BF%86%E5%8C%96%E6%90%9C%E7%B4%A2/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="动态规划记忆化">动态规划记忆化</span>
            <span class="post-date" title="2020-12-05 00:00:00">2020/12/05</span>
        </a>
        
        <a  class="All AI论文 "
           href="/2020/07/25/d_300-paperDAT/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="DAT for recommender">DAT for recommender</span>
            <span class="post-date" title="2020-07-25 08:50:20">2020/07/25</span>
        </a>
        
        <a  class="All 数学 "
           href="/2020/07/20/a_%E7%AE%97%E6%B3%95/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="算法总结">算法总结</span>
            <span class="post-date" title="2020-07-20 00:00:00">2020/07/20</span>
        </a>
        
        <a  class="All 数学 "
           href="/2020/07/20/a_%E6%95%B0%E5%AD%A6/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="数学">数学</span>
            <span class="post-date" title="2020-07-20 00:00:00">2020/07/20</span>
        </a>
        
        <a  class="All "
           href="/2020/07/05/%E5%AF%B9%E9%9A%90%E7%A7%98%E7%9A%84%E8%A7%92%E8%90%BD%E7%94%B5%E8%A7%86%E5%89%A7%E7%9A%84%E6%84%9F%E6%82%9F%E4%BB%A5%E5%8F%8A%E8%AE%A4%E8%AF%86/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="对隐秘的角落电视剧的感悟以及认识">对隐秘的角落电视剧的感悟以及认识</span>
            <span class="post-date" title="2020-07-05 00:00:00">2020/07/05</span>
        </a>
        
        <a  class="All 经典算法 "
           href="/2020/07/04/a_%E6%A8%A1%E6%9D%BF%E5%BA%93/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="模板库">模板库</span>
            <span class="post-date" title="2020-07-04 08:50:20">2020/07/04</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2020/07/04/a_%E7%99%BE%E5%BA%A6%E6%8A%80%E6%9C%AF%E8%AE%A4%E8%AF%81/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="百度技术认证">百度技术认证</span>
            <span class="post-date" title="2020-07-04 08:50:20">2020/07/04</span>
        </a>
        
        <a  class="All AI论文 "
           href="/2020/07/01/d_GCN%E8%AE%BA%E6%96%87%E8%A7%A3%E8%AF%BB/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="GCN">GCN</span>
            <span class="post-date" title="2020-07-01 08:50:20">2020/07/01</span>
        </a>
        
        <a  class="All AI论文 "
           href="/2020/06/04/d_word2vec_node2vec/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="Word2vec &amp; Node2vec">Word2vec &amp; Node2vec</span>
            <span class="post-date" title="2020-06-04 08:50:20">2020/06/04</span>
        </a>
        
        <a  class="All AI论文 "
           href="/2020/05/05/d_GAN/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="GAN">GAN</span>
            <span class="post-date" title="2020-05-05 08:50:20">2020/05/05</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2020/05/04/d_Deepwalk/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="DEEPWALK">DEEPWALK</span>
            <span class="post-date" title="2020-05-04 08:50:20">2020/05/04</span>
        </a>
        
        <a  class="All 经典算法 "
           href="/2020/02/15/b_%E8%B4%AA%E5%BF%83/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="贪心与动态规划">贪心与动态规划</span>
            <span class="post-date" title="2020-02-15 00:00:00">2020/02/15</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2020/02/12/a_2020/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="机器学习零散知识记录">机器学习零散知识记录</span>
            <span class="post-date" title="2020-02-12 00:00:00">2020/02/12</span>
        </a>
        
        <a  class="All 经典算法 "
           href="/2020/02/12/b_%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%98/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="动态规划——背包问题">动态规划——背包问题</span>
            <span class="post-date" title="2020-02-12 00:00:00">2020/02/12</span>
        </a>
        
        <a  class="All 经典算法 "
           href="/2020/02/03/b_%E8%93%9D%E6%A1%A5%E6%9D%AF%E7%BB%83%E4%B9%A0%E9%A2%98/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="蓝桥杯">蓝桥杯</span>
            <span class="post-date" title="2020-02-03 00:00:00">2020/02/03</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2020/01/20/c_%E5%86%B3%E7%AD%96%E6%A0%91/"
           data-tag="50"
           data-author="" >
            <span class="post-title" title="决策树总结">决策树总结</span>
            <span class="post-date" title="2020-01-20 00:00:00">2020/01/20</span>
        </a>
        
        <a  class="All 经典算法 "
           href="/2020/01/12/b_%E5%85%A8%E6%8E%92%E5%88%97/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="全排列">全排列</span>
            <span class="post-date" title="2020-01-12 00:00:00">2020/01/12</span>
        </a>
        
        <a  class="All 经典算法 "
           href="/2019/12/02/b_%E6%9C%89%E7%A9%B7%E8%87%AA%E5%8A%A8%E6%9C%BA/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="有穷自动机">有穷自动机</span>
            <span class="post-date" title="2019-12-02 00:00:00">2019/12/02</span>
        </a>
        
        <a  class="All 经典算法 "
           href="/2019/11/20/b_%E9%94%99%E6%8E%92%E5%85%AC%E5%BC%8F/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="错排公式">错排公式</span>
            <span class="post-date" title="2019-11-20 00:00:00">2019/11/20</span>
        </a>
        
        <a  class="All "
           href="/2019/10/29/a_%E5%BC%97%E6%B4%9B%E4%BC%8A%E5%BE%B7/"
           data-tag="数据结构，最短路径，图"
           data-author="" >
            <span class="post-title" title="最短路径之弗洛伊德算法">最短路径之弗洛伊德算法</span>
            <span class="post-date" title="2019-10-29 00:00:00">2019/10/29</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2019/08/04/c_BPR/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="贝叶斯">贝叶斯</span>
            <span class="post-date" title="2019-08-04 08:50:20">2019/08/04</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2019/08/02/c_matrix/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="矩阵分解与正则化">矩阵分解与正则化</span>
            <span class="post-date" title="2019-08-02 08:25:59">2019/08/02</span>
        </a>
        
        <a  class="All "
           href="/2019/07/28/c_coordination1/"
           data-tag="AI,机器学习,相似度计算"
           data-author="" >
            <span class="post-title" title="协同过滤-上">协同过滤-上</span>
            <span class="post-date" title="2019-07-28 08:25:59">2019/07/28</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2019/07/26/c_cnn/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="cnn">cnn</span>
            <span class="post-date" title="2019-07-26 18:54:51">2019/07/26</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2019/07/22/c_coordination2/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="协同过滤—下">协同过滤—下</span>
            <span class="post-date" title="2019-07-22 18:54:26">2019/07/22</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2019/07/22/c_kmeans/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="K-means算法">K-means算法</span>
            <span class="post-date" title="2019-07-22 18:53:07">2019/07/22</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2019/07/21/c_nerve2/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="神经网络-下">神经网络-下</span>
            <span class="post-date" title="2019-07-21 11:37:18">2019/07/21</span>
        </a>
        
        <a  class="All "
           href="/2019/07/20/c_nerve1/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="神经网络—上">神经网络—上</span>
            <span class="post-date" title="2019-07-20 17:29:10">2019/07/20</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2019/06/22/c_gradient/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="线性回归与梯度下降算法">线性回归与梯度下降算法</span>
            <span class="post-date" title="2019-06-22 08:26:36">2019/06/22</span>
        </a>
        
        <a  class="All 机器学习 "
           href="/2019/06/19/c_flyback/"
           data-tag="AI,机器学习"
           data-author="" >
            <span class="post-title" title="线性回归">线性回归</span>
            <span class="post-date" title="2019-06-19 00:00:00">2019/06/19</span>
        </a>
        
        <a  class="All 经典算法 "
           href="/2019/05/20/b_%E8%A7%86%E9%A2%91%E7%BB%8F%E5%85%B8%E7%AE%97%E6%B3%95/"
           data-tag=""
           data-author="" >
            <span class="post-title" title="简单入门算法">简单入门算法</span>
            <span class="post-date" title="2019-05-20 00:00:00">2019/05/20</span>
        </a>
        
        <div id="no-item-tips">

        </div>
    </nav>
    <div id="outline-list">
    </div>
</div>
    </div>
    <div class="hide-list">
        <div class="semicircle" data-title="切换全屏 快捷键 s">
            <div class="brackets first"><</div>
            <div class="brackets">&gt;</div>
        </div>
    </div>
</aside>
<div id="post">
    <div class="pjax">
        <article id="post-c_gradient" class="article article-type-post" itemscope itemprop="blogPost">
    
        <h1 class="article-title">线性回归与梯度下降算法</h1>
    
    <div class="article-meta">
        
        
        
        <span class="book">
            <i class="iconfont icon-category"></i>
            
            
            <a  data-rel="机器学习">机器学习</a>
            
        </span>
        
        
        <span class="tag">
            <i class="iconfont icon-tag"></i>
            
            <a class="color3">AI</a>
            
            <a class="color5">机器学习</a>
            
        </span>
        
    </div>
    <div class="article-meta">
        
            Created At : <time class="date" title='Updated At: 2020-08-09 14:28:07'>2019-06-22 08:26</time>
        
    </div>
    <div class="article-meta">
        
        
        <span id="busuanzi_container_page_pv">
            Views 👀 :<span id="busuanzi_value_page_pv">
                <span class="count-comment">
                    <span class="spinner">
                      <div class="cube1"></div>
                      <div class="cube2"></div>
                    </span>
                </span>
            </span>
        </span>
        
        
    </div>
    
    <div class="toc-ref">
    
        <ol class="toc"><li class="toc-item toc-level-1"><a class="toc-link" href="#%E7%BA%BF%E6%80%A7%E5%9B%9E%E5%BD%92%E7%9A%84%E5%9B%9E%E9%A1%BE"><span class="toc-text">线性回归的回顾</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E8%AF%B4%E7%99%BD%E4%BA%86%E5%B0%B1%E6%98%AF%E6%9E%84%E9%80%A0%E4%B8%80%E4%B8%AA%E6%A8%A1%E5%9E%8B%E5%B0%BD%E5%8F%AF%E8%83%BD%E8%AE%A9%E6%95%B0%E6%8D%AE%E9%83%BD%E9%9D%A0%E8%BF%91%E8%AF%A5%E6%A8%A1%E5%9E%8B%EF%BC%8C%E4%BD%86%E6%98%AF%E8%BF%99%E4%B8%AA%E6%A8%A1%E5%9E%8B%E5%BE%97%E6%9C%89%E8%A7%84%E5%BE%8B%E3%80%82%E5%90%A6%E5%88%99%E2%80%9C%E8%BF%87%E6%8B%9F%E5%90%88%E2%80%9D%E6%97%A0%E6%B3%95%E8%BF%9B%E8%A1%8C%E9%A2%84%E6%B5%8B"><span class="toc-text">说白了就是构造一个模型尽可能让数据都靠近该模型，但是这个模型得有规律。否则“过拟合”无法进行预测</span></a></li></ol></li></ol></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#%E6%96%B9%E5%90%91%E5%AF%BC%E6%95%B0%E5%92%8C%E6%A2%AF%E5%BA%A6"><span class="toc-text">方向导数和梯度</span></a></li><li class="toc-item toc-level-1"><a class="toc-link" href="#%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D%E7%AE%97%E6%B3%95"><span class="toc-text">梯度下降算法</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%8E%9F%E7%90%86"><span class="toc-text">原理</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E7%AE%97%E6%B3%95%E6%AD%A5%E9%AA%A4"><span class="toc-text">算法步骤</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#a-%E7%94%A8%E9%9A%8F%E6%9C%BA%E5%80%BC%E5%88%9D%E5%A7%8B%E5%8C%96%E6%9D%83%E9%87%8D%E5%92%8C%E5%81%8F%E5%B7%AE%EF%BC%8C%E9%80%89%E6%8B%A9%E9%80%82%E5%BD%93%E7%9A%84%E5%AD%A6%E4%B9%A0%E6%95%88%E7%8E%87%E5%92%8C%E6%9C%80%E5%A4%A7%E8%BF%AD%E4%BB%A3%E6%AC%A1%E6%95%B0"><span class="toc-text">a.用随机值初始化权重和偏差，选择适当的学习效率和最大迭代次数</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#b-%E6%8A%8A%E8%BE%93%E5%85%A5%E6%95%B0%E6%8D%AE%EF%BC%8C%E6%A0%B9%E6%8D%AE%E4%BD%A0%E5%90%8E%E9%80%A0%E7%9A%84%E6%A8%A1%E5%9E%8B%E5%87%BD%E6%95%B0h%CE%B8%E5%BE%97%E5%88%B0%E8%BE%93%E5%87%BA%E5%80%BC"><span class="toc-text">b.把输入数据，根据你后造的模型函数hθ得到输出值</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#c-%E8%AE%A1%E7%AE%97%E9%A2%84%E6%B5%8B%E5%80%BC%E5%92%8C%E7%9C%9F%E5%AE%9E%E5%80%BC%E4%B9%8B%E9%97%B4%E7%9A%84%E8%AF%AF%E5%B7%AE"><span class="toc-text">c.计算预测值和真实值之间的误差</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#d-%E8%B0%83%E6%95%B4%E7%9B%B8%E5%BA%94%E7%9A%84%EF%BC%88%E6%9D%83%E9%87%8D%EF%BC%89%E5%80%BC%E4%BB%A5%E5%87%8F%E5%B0%8F%E8%AF%AF%E5%B7%AE"><span class="toc-text">d.调整相应的（权重）值以减小误差</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#e-%E9%87%8D%E5%A4%8D%E8%BF%AD%E4%BB%A3%EF%BC%8C%E7%9B%B4%E8%87%B3%E5%BE%97%E5%88%B0%E7%BD%91%E7%BB%9C%E6%9D%83%E9%87%8D%E7%9A%84%E6%9C%80%E4%BD%B3%E5%80%BC"><span class="toc-text">e.重复迭代，直至得到网络权重的最佳值</span></a></li></ol></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%B8%A4%E7%A7%8D%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D%E6%B3%95"><span class="toc-text">两种梯度下降法</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%AE%97%E6%B3%95%E6%94%B6%E6%95%9B%E5%88%A4%E6%96%AD%E6%96%B9%E6%B3%95"><span class="toc-text">算法收敛判断方法</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E9%9A%8F%E6%9C%BA%E4%B8%8E%E6%89%B9%E9%87%8F%E7%9A%84%E5%8C%BA%E5%88%AB%EF%BC%9A"><span class="toc-text">随机与批量的区别：</span></a></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#%E7%BA%BF%E6%80%A7%E5%9B%9E%E5%BD%92%E9%97%AE%E9%A2%98%E4%B8%8E%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D%E7%9A%84%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0%EF%BC%9A"><span class="toc-text">线性回归问题与梯度下降的代码实现：</span></a></li><li class="toc-item toc-level-1"><a class="toc-link" href="#%E5%B0%8F%E7%BB%93"><span class="toc-text">小结</span></a></li></ol>
    
<style>
    .left-col .switch-btn,
    .left-col .switch-area {
        display: none;
    }
    .toc-level-4 i,
    .toc-level-4 ol {
        display: none !important;
    }
</style>
</div>
    
    <div class="article-entry" itemprop="articleBody">
      
        <h1 id="线性回归的回顾"><a href="#线性回归的回顾" class="headerlink" title="线性回归的回顾"></a><strong>线性回归</strong>的回顾</h1><p>解决线性问题</p>
<p><strong>什么是<a target="_blank" rel="noopener" href="http://moluggg.top/2019/06/19/c_线性回归/">线性回归</a>？</strong></p>
<p>下面我们来举例何为一元线性回归分析，对线性回归深一步巩固。</p>
<h4 id="说白了就是构造一个模型尽可能让数据都靠近该模型，但是这个模型得有规律。否则“过拟合”无法进行预测"><a href="#说白了就是构造一个模型尽可能让数据都靠近该模型，但是这个模型得有规律。否则“过拟合”无法进行预测" class="headerlink" title="说白了就是构造一个模型尽可能让数据都靠近该模型，但是这个模型得有规律。否则“过拟合”无法进行预测"></a>说白了就是构造一个模型尽可能让数据都靠近该模型，但是这个模型得有规律。否则“过拟合”无法进行预测</h4><p>来一个例子，以现行模型为例：</p>
<p>图1为某地区的房屋面积(feet)与价格($)的一个数据集，在该数据集中，只有一个自变量面积(feet)，和一个因变量价格($)，所以我们可以将数据集呈现在二维空间上，如图2所示。</p>
<p>利用该数据集，我们的目的是训练一个线性方程，无限逼近所有数据点，然后利用该方程与给定的某一自变量（本例中为面积），可以预测因变量（本例中为房价）。本例中，训练所得的线性方程如图3所示。</p>
<p><img src="/../../img/1566387167964.png" alt="1566387167964"></p>
<p>​                                              图1、房价与面积对应数据集</p>
<p><img src="/../../img/1566387199711.png" alt="1566387199711"></p>
<p>​                                               图2、二维空间上的房价与面积对应图</p>
<p><img src="/../../img/1566387212414.png" alt="1566387212414"></p>
<p>同时，分析得到的线性方程为：</p>
<p><img src="/../../img/1566387222673.png" alt="1566387222673"></p>
<p>接下来还是该案例，举一个多元线性回归的例子。如果增添了一个自变量：房间数，那么数据集可以如下所示：</p>
<p><img src="/../../img/1566387230556.png" alt="1566387230556"></p>
<p>​                                             图4、房价与面积、房间数对应数据集</p>
<p>那么，分析得到的线性方程应如下所示：</p>
<p><img src="/../../img/1566387240031.png" alt="1566387240031"></p>
<p><strong><em>其中x1，x2可以是矩阵</em></strong>，比如这里的bedrooms是x1，price是x2</p>
<p>因此，无论是一元线性方程还是多元线性方程，可统一写成如下的格式：</p>
<p><img src="/../../img/1566387246069.png" alt="1566387246069"></p>
<p>上式中x0=1，而求线性方程则演变成了求方程的参数ΘT。</p>
<p>线性回归假设特征和结果满足线性关系。其实线性关系的表达能力非常强大，每个特征对结果的影响强弱可以有前面的参数体现，而且每个特征变量可以首先映射到一个函数，然后再参与线性计算，这样就可以表达特征与结果之间的非线性关系。</p>
<h1 id="方向导数和梯度"><a href="#方向导数和梯度" class="headerlink" title="方向导数和梯度"></a>方向导数和梯度</h1><p>在高数中，我们学习了方向导数的含义。通俗的说，<strong>方向导数就是某点P沿着某一方向的变化率，而梯度是某点P变化最大的那个方向，也就是最陡峭的地方。</strong></p>
<p><img src="/../../img/1566387255203.png" alt="1566387255203"></p>
<script type="math/tex; mode=display">
</script><p>  如图，P点四个方向是不同的方向导数，其中所有方向（不止四个）中最大的方向就是正梯度的方向</p>
<p>更多请见：<a target="_blank" rel="noopener" href="https://www.cnblogs.com/wangguchangqing/p/10521330.html#autoid-0-0-0">https://www.cnblogs.com/wangguchangqing/p/10521330.html#autoid-0-0-0</a></p>
<h1 id="梯度下降算法"><a href="#梯度下降算法" class="headerlink" title="梯度下降算法"></a><strong>梯度下降算法</strong></h1><h2 id="原理"><a href="#原理" class="headerlink" title="原理"></a>原理</h2><p><img src="/../../img/1566387263781.png" alt="1566387263781"></p>
<p>这是将三维图形立体化，假设这个二维图就是三维中最陡的曲线（上面那个三维图中黑色曲线就是，三维图表示损失函数与θ1，θ0的关系）</p>
<p>梯度下降法的目的就是：求出θ，尽可能的下降到最低点。</p>
<p>为此，我们先要构造这个损失函数：要知道，模型函数 hθ不只是线性函数，还可以是非线性的函数</p>
<script type="math/tex; mode=display">
</script><p><img src="/../../img/1566387270968.png" alt="1566387270968"></p>
<p>由于我们不能一步确定这条最陡的曲线，所以需要每走一步进行梯度计算，这样一直走到接近最底或者走步达到最大次数。</p>
<p>这里，步长大小称为学习效率α（alpha），在0-1之间，需要选择恰当的值。如果步长过大，可能错过谷底，过小可能陷入局部最小，效率过低，达不到最底。</p>
<p><img src="/../../img/1566387278976.png" alt="1566387278976"></p>
<p>如图所示，红色代表步长过大，绿色代表步长过小。</p>
<h2 id="算法步骤"><a href="#算法步骤" class="headerlink" title="算法步骤"></a>算法步骤</h2><h5 id="a-用随机值初始化权重和偏差，选择适当的学习效率和最大迭代次数"><a href="#a-用随机值初始化权重和偏差，选择适当的学习效率和最大迭代次数" class="headerlink" title="a.用随机值初始化权重和偏差，选择适当的学习效率和最大迭代次数"></a>a.用随机值初始化权重和偏差，选择适当的学习效率和最大迭代次数</h5><p>刚开始的值是随机赋值的，也就是说初始位置你来选择，步长，  走多少步停止你来定</p>
<h5 id="b-把输入数据，根据你后造的模型函数hθ得到输出值"><a href="#b-把输入数据，根据你后造的模型函数hθ得到输出值" class="headerlink" title="b.把输入数据，根据你后造的模型函数hθ得到输出值"></a>b.把输入数据，根据你后造的模型函数hθ得到输出值</h5><h5 id="c-计算预测值和真实值之间的误差"><a href="#c-计算预测值和真实值之间的误差" class="headerlink" title="c.计算预测值和真实值之间的误差"></a>c.计算预测值和真实值之间的误差</h5><p>也就是构造损失函数</p>
<h5 id="d-调整相应的（权重）值以减小误差"><a href="#d-调整相应的（权重）值以减小误差" class="headerlink" title="d.调整相应的（权重）值以减小误差"></a>d.调整相应的（权重）值以减小误差</h5><h5 id="e-重复迭代，直至得到网络权重的最佳值"><a href="#e-重复迭代，直至得到网络权重的最佳值" class="headerlink" title="e.重复迭代，直至得到网络权重的最佳值"></a>e.重复迭代，直至得到网络权重的最佳值</h5><h2 id="两种梯度下降法"><a href="#两种梯度下降法" class="headerlink" title="两种梯度下降法"></a>两种梯度下降法</h2><p><strong>1.2.1</strong>   <strong>批量梯度下降算法</strong></p>
<p>由之前所述，<strong><em>求ΘT的问题演变成了求J(Θ)的极小值问题</em></strong>，这里使用梯度下降法。而梯度下降法中的梯度方向由J(Θ)对Θ的偏导数确定，由于求的是极小值，因此梯度方向是偏导数的反方向。</p>
<p><img src="/../../img/1566387293318.png" alt="1566387293318"></p>
<p><strong>以下假如数据集中只有一条样本：</strong></p>
<p>公式(5)中α为学习速率，当α过大时，有可能越过最小值，而α当过小时，容易造成迭代次数较多，收敛速度较慢。假如数据集中只有一条样本，那么样本数量，所以公式(5)中</p>
<p> <img src="/../../img/1566387310701.png" alt="1566387310701"></p>
<p>所以公式(5)就演变成：</p>
<p><img src="/../../img/1566387319438.png" alt="1566387319438"></p>
<ul>
<li>[ ] #### <strong><em>这个公式尤为关键，需要明白他的推到过程以及原理</em></strong></li>
</ul>
<p><strong>当样本数量m不为1时</strong>，将公式(5)中<img src="/../../img/1566387337585.png" alt="1566387337585">由公式(4)带入求偏导，那么每个参数沿梯度方向的变化值由公式(7)求得。</p>
<p><img src="/../../img/1566387346029.png" alt="1566387346029"></p>
<p>初始时ΘT可设为0，然后迭代使用公式(7)计算ΘT中的每个参数，直至收敛为止。由于每次迭代计算ΘT时，都使用了整个样本集，因此我们称该梯度下降算法为批量梯度下降算法(batch gradient descent)。</p>
<p><strong>1.2.2</strong>  <strong>随机梯度下降算法</strong></p>
<p>当样本集数据量m很大时，批量梯度下降算法每迭代一次的复杂度为O(mn),复杂度很高。因此，<strong>为了减少复杂度，当m很大时，我们更多时候使用随机梯度下降算法(stochastic gradient descent),算法如下所示：*</strong>（具体怎么个高法？）*</p>
<p><img src="/../../img/1566387372748.png" alt="1566387372748"></p>
<p>即每读取一条样本，就迭代对ΘT进行更新，然后判断其是否收敛，若没收敛，则继续读取样本进行处理，如果所有样本都读取完毕了，则循环重新从头开始读取样本进行处理。</p>
<p>这样迭代一次的算法复杂度为O(n)。对于大数据集，很有可能只需读取一小部分数据，函数J(Θ)就收敛了。比如样本集数据量为100万，有可能读取几千条或几万条时，函数就达到了收敛值。所以当数据量很大时，更倾向于选择随机梯度下降算法。</p>
<p>但是，相较于批量梯度下降算法而言，随机梯度下降算法使得J(Θ)趋近于最小值的速度更快，但是有可能造成永远不可能收敛于最小值，有可能一直会在最小值周围震荡，但是实践中，大部分值都能够接近于最小值，效果也都还不错。</p>
<h3 id="算法收敛判断方法"><a href="#算法收敛判断方法" class="headerlink" title="算法收敛判断方法"></a><strong>算法收敛判断方法</strong></h3><ul>
<li><p>参数ΘT的变化距离为0，或者说变化距离小于某一阈值（ΘT中每个参数的变化绝对值都小于一个阈值）。为减少计算复杂度，该方法更为推荐使用。</p>
</li>
<li><p>J(Θ)不再变化，或者说变化程度小于某一阈值。计算复杂度较高，但是如果为了精确程度，那么该方法更为推荐使用。</p>
</li>
</ul>
<h2 id="随机与批量的区别："><a href="#随机与批量的区别：" class="headerlink" title="随机与批量的区别："></a>随机与批量的区别：</h2><p>批量函数：</p>
<p>就是<img src="/../../img/1566387390769.png" alt="1566387390769"></p>
<p>先将所有的样本计算求和，然后更新thata</p>
<p>而随机批量是</p>
<p>一个样本更新一次theta</p>
<p>梯度下降算法的优缺点**</p>
<p>随机梯度下降是通过每个样本来迭代更新一次，如果样本量很大的情况（例如几十万），那么可能只用其中几万条或者几千条的样本，就已经将theta迭代到最优解了，对比上面的批量梯度下降，迭代一次需要用到十几万训练样本，一次迭代不可能最优，如果迭代10次的话就需要遍历训练样本10次。但是，SGD伴随的一个问题是<strong>噪音</strong>较BGD要多，使得SGD并不是每次迭代都向着整体最优化方向。</p>
<p><strong><em>对于上面的linear regression问题，与批量梯度下降对比，随机梯度下降求解的会是最优解吗？</em></strong></p>
<p>（1）批量梯度下降—-最小化所有训练样本的<strong>损失函数，使得最终求解的是全局的最优解</strong>，即求解的参数是使得风险函数最小。</p>
<p>（2）随机梯度下降—-最小化每条样本的损失函数，虽然不是每次迭代得到的损失函数都向着全局最优方向， 但是<strong>大的整体的方向是向全局最优解</strong>的，最终的结果往往是在全局最优解附近。</p>
<hr>
<p>第一种，遍历全部数据集算一次损失函数，然后算函数对各个参数的梯度，更新梯度。这种方法每更新一次参数都要把数据集里的所有样本都看一遍，计算量开销大，计算速度慢，不支持在线学习，这称为Batch gradient descent，批梯度下降。</p>
<p>另一种，每看一个数据就算一下损失函数，然后求梯度更新参数，这个称为随机梯度下降，stochastic gradient descent。这个方法速度比较快，但是收敛性能不太好，可能在最优点附近晃来晃去，hit不到最优点。两次参数的更新也有可能互相抵消掉，造成目标函数震荡的比较剧烈。</p>
<p>为了克服两种方法的缺点，现在一般采用的是一种折中手段，mini-batch gradient decent，小批的梯度下降，这种方法把数据分为若干个批，按批来更新参数，这样，一个批中的一组数据共同决定了本次梯度的方向，下降起来就不容易跑偏，减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多，计算量也不是很大。</p>
<p>详细的各自的优缺点：<a target="_blank" rel="noopener" href="https://blog.csdn.net/lilyth_lilyth/article/details/8973972">https://blog.csdn.net/lilyth_lilyth/article/details/8973972</a></p>
<h1 id="线性回归问题与梯度下降的代码实现："><a href="#线性回归问题与梯度下降的代码实现：" class="headerlink" title="线性回归问题与梯度下降的代码实现："></a>线性回归问题与梯度下降的代码实现：</h1><pre><code class="lang-python">import numpy as np
import matplotlib.pyplot as plt 

x=[150,200,250,300,350,400,600]
y=[6450,7450,8450,9450,11450,15450,18450]#x,y两组数据
theta0,theta1=0,0#theta就是所求两个参数
al=0.000001#al就是alpha，学习效率
m=len(x)#样本总数
max=100000#最大循环次数
#收集theta值便于画图
print(&quot;请等待大概3s，若不想等待，请修改max值&quot;)
def piliang (x,y,theta0,theta1,al,m,max):#批量梯度法（BGD），初学者建议不要使用
    ls0=[]
    ls1=[]
    for j in range (max):
        m1,m2=0,0
        sum1,sum2=0,0
        error=0
        k=0.000000001


        for i in range(m):
            dianta=theta0+theta1*x[i]-y[i]
            m1+=dianta
            m2+=(dianta)*x[i]

            sum1+=m1      #批量函数，计算  ∑（h[i]-y[i])  i 从1 到 m
            sum2+=m2
        theta0-=(al/m)*sum1 #加个m会更好一些，为甚么？m个样本，m样本误差，当然/m了，平均样本误差
        theta1-=(al/m)*sum2
        if j&lt;1000:#对前10000个theta迭代的值记录便于画图
            ls0.append(theta0)
            ls1.append(theta1)


        for t in range(m):
            error+=(theta0+theta1*x[t]-y[t])**2   #计算误差
        if error&lt;k:#判断是否误差可以允许的范围,也就是收敛条件
            break
    return theta0,theta1,ls0,ls1
&#39;&#39;&#39;网上计算误差的方法：（比较而言比较难理解）
    for i in range(len(x)):
        error1 += (y[i] - (theta0 + theta1 * x[i])) ** 2 / 2
    if abs(error1 - error0) &lt; epsilon:
        break
    else:
        error0 = error1&#39;&#39;&#39;


def suiji (x,y,theta0,theta1,al,m,max):#随机梯度（SGD）
    error=0
    k=0.0000001
    for j in range (max):
        m1,m2=0,0#
        for i in range(m):
            m1+=theta0+theta1*x[i]-y[i]  #计算h[i]-y[i]
            m2+=(theta1*x[i]-y[i])*x[i]

            theta0-=(al/m)*m1   #迭代更新,不断更新迭代知道迭代次数达到最大值或满足条件
            theta1-=(al/m)*m2




        for t in range(m):
            error+=(theta0+theta1*x[t]-y[t])**2  #计算误差
        if error&lt;k:#判断是否误差可以允许的范围
            break

    return theta0,theta1


theta0,theta1,ls0,ls1= piliang (x,y,theta0,theta1,al,m,max)

print(&quot;\n&quot;)
theta2,theta3= suiji (x,y,theta0,theta1,al,m,max)
print(&quot;(批量梯度值) :h=&amp;#123;&amp;#125; + &amp;#123;&amp;#125;*x&quot;. format(theta0,theta1))
print(&quot;（随机梯度）:h=&amp;#123;&amp;#125; + &amp;#123;&amp;#125;*x&quot;. format(theta2,theta3))
#以下是画图代码，可忽略


print(&quot;继续等待散点图以及拟合的线性函数&quot;)
plt.scatter(x,y)
xx=np.linspace(0,700,30)


plt.title(&quot;the contact betwee Square and price&quot;)
plt.xlabel(&quot;square&quot;)
plt.ylabel(&quot;price&quot;)
h1=theta1*xx+theta0
h2=theta3*xx+theta2
plt.plot(xx,h1,&quot;r--&quot;,label=&quot;piliang&quot;)
plt.plot(xx,h2,&quot;g^&quot;,label=&quot;suiji&quot;)
plt.legend()
plt.show()

print(&quot;theta0,theta1&quot;)
plt.title(&quot; &quot;)
plt.xlabel(&quot; times&quot;)
plt.ylabel(&quot;theta&quot;)
plt.plot(range(1000),ls0,label=&quot;theta0&quot;)
plt.plot(range(1000),ls1,&quot;g&quot;,label=&quot;theta1&quot;)
plt.legend()
plt.show()
</code></pre>
<h1 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h1><p>1.梯度下降法的损失函数的意义，核心步骤</p>
<p>2.明白两种梯度下降法的优缺点</p>
<p><a target="_blank" rel="noopener" href="http://www.ishowcode.com/ai/ml/linear-regression-gradient-descent/">转自这篇文章，并进行修改</a></p>

      
       <hr><span style="font-style: italic;color: gray;"> 转载请注明来源，欢迎对文章中的引用来源进行考证，欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论，也可以邮件至 2572876783@qq.com </span>
    </div>
</article>


<p>
    <a  class="dashang" onclick="dashangToggle()">💰</a>
</p>






    
        <!-- MathJax配置，可通过单美元符号书写行内公式等 -->
<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
    "HTML-CSS": {
        preferredFont: "TeX",
        availableFonts: ["STIX","TeX"],
        linebreaks: { automatic:true },
        EqnChunk: (MathJax.Hub.Browser.isMobile ? 10 : 50)
    },
    tex2jax: {
        inlineMath: [ ["$", "$"], ["\\(","\\)"] ],
        processEscapes: true,
        ignoreClass: "tex2jax_ignore|dno",
        skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
    },
    TeX: {
        equationNumbers: { autoNumber: "AMS" },
        noUndefined: { attributes: { mathcolor: "red", mathbackground: "#FFEEEE", mathsize: "90%" } },
        Macros: { href: "{}" }
    },
    messageStyle: "none"
    });
</script>
<!-- 给MathJax元素添加has-jax class -->
<script type="text/x-mathjax-config">
    MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax(), i;
        for(i=0; i < all.length; i += 1) {
            all[i].SourceElement().parentNode.className += ' has-jax';
        }
    });
</script>
<!-- 通过连接CDN加载MathJax的js代码 -->
<script type="text/javascript" async
        src="//cdn.jsdelivr.net/npm/mathjax@2.7.8/unpacked/MathJax.js?config=TeX-MML-AM_CHTML">
</script>
<input type="hidden" id="MathJax-js"
        value="//cdn.jsdelivr.net/npm/mathjax@2.7.8/unpacked/MathJax.js?config=TeX-MML-AM_CHTML">
</input>
    




    </div>
    <div class="copyright">
        <p class="footer-entry">
    ©2016-2020 MOLU
</p>
<p class="footer-entry">Built with <a href="https://hexo.io/" target="_blank">Hexo</a> and <a href="https://github.com/yelog/hexo-theme-3-hexo" target="_blank">3-hexo</a> theme</p>

    </div>
    <div class="full-toc">
        <button class="full" data-title="切换全屏 快捷键 s"><span class="min "></span></button>
<a class="" id="rocket" ></a>

    </div>
</div>

<div class="hide_box" onclick="dashangToggle()"></div>
<div class="shang_box">
    <a class="shang_close"  onclick="dashangToggle()">×</a>
    <div class="shang_tit">
        <p>Help us with donation</p>
    </div>
    <div class="shang_payimg">
        <div class="pay_img">
            <img src="/img/alipay.jpg" class="alipay" title="扫码支持">
            <img src="/img/weixin.jpg" class="weixin" title="扫码支持">
        </div>
    </div>
    <div class="shang_payselect">
        <span><label><input type="radio" name="pay" checked value="alipay">alipay</label></span><span><label><input type="radio" name="pay" value="weixin">weixin</label></span>
    </div>
</div>


</body>
<script src="/js/jquery.pjax.js?v=1.1.0" ></script>

<script src="/js/script.js?v=1.1.0" ></script>
<script>
    var img_resize = 'default';
    function initArticle() {
        /*渲染对应的表格样式*/
        
            $("#post .pjax table").addClass("green_title");
        

        /*渲染打赏样式*/
        
        $("input[name=pay]").on("click", function () {
            if($("input[name=pay]:checked").val()=="weixin"){
                $(".shang_box .shang_payimg .pay_img").addClass("weixin_img");
            } else {
                $(".shang_box .shang_payimg .pay_img").removeClass("weixin_img");
            }
        })
        

        /*高亮代码块行号*/
        

        /*访问数量*/
        
        $.getScript("//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js");
        

        /*代码高亮，行号对齐*/
        $('.pre-numbering').css('line-height',$('.has-numbering').css('line-height'));

        
        
    }

    /*打赏页面隐藏与展示*/
    
    function dashangToggle() {
        $(".shang_box").fadeToggle();
        $(".hide_box").fadeToggle();
    }
    

</script>

<!--加入行号的高亮代码块样式-->

<!--自定义样式设置-->
<style>
    
    
    .nav {
        width: 542px;
    }
    .nav.fullscreen {
        margin-left: -542px;
    }
    .nav-left {
        width: 120px;
    }
    
    
    @media screen and (max-width: 1468px) {
        .nav {
            width: 492px;
        }
        .nav.fullscreen {
            margin-left: -492px;
        }
        .nav-left {
            width: 100px;
        }
    }
    
    
    @media screen and (max-width: 1024px) {
        .nav {
            width: 492px;
            margin-left: -492px
        }
        .nav.fullscreen {
            margin-left: 0;
        }
    }
    
    @media screen and (max-width: 426px) {
        .nav {
            width: 100%;
        }
        .nav-left {
            width: 100%;
        }
    }
    
    
    .nav-right .title-list nav a .post-title, .nav-right .title-list #local-search-result a .post-title {
        color: #383636;
    }
    
    
    .nav-right .title-list nav a .post-date, .nav-right .title-list #local-search-result a .post-date {
        color: #5e5e5f;
    }
    
    
    .nav-right nav a.hover, #local-search-result a.hover{
        background-color: #e2e0e0;
    }
    
    

    /*列表样式*/
    

    /* 背景图样式 */
    
    


    /*引用块样式*/
    

    /*文章列表背景图*/
    

    
</style>







</html>
